import axios from 'axios'

// 创建 axios 实例
const request = axios.create({
   baseURL: import.meta.env.PROD 
    ? 'https://www.jyszprd.com/h5-api/' 
    : 'https://www.jyszprd.com/h5-api/',
  timeout: 5000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么，比如添加token
    const token = localStorage.getItem('access_token') || ''
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    // 对请求错误做些什么
    console.log(error)
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    const res = response.data
    
    // 特殊处理blob类型响应（文件下载）
    if (response.config.responseType === 'blob' && response.data instanceof Blob) {
      // 检查是否为错误响应（通过content-type判断）
      const contentType = response.headers['content-type']
      if (contentType && contentType.includes('application/json')) {
        // 可能是错误响应，需要解析blob中的错误信息
        return new Promise((_resolve, reject) => {
          const reader = new FileReader()
          reader.onload = () => {
            try {
              const errorMsg = JSON.parse(reader.result as string)
              reject(new Error(errorMsg.message || 'Error'))
            } catch {
              reject(new Error('下载失败'))
            }
          }
          reader.readAsText(response.data)
        })
      }else {
    // 正常 blob 响应，直接 resolve
    return Promise.resolve(response)
  }
      // // 正常文件下载响应
      // return response
    }
    
    // 根据实际业务处理不同的状态码
    if (res.code !== 200) {
      console.error('请求错误:', res.message)
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res
    }
  },
  error => {
    // 对响应错误做点什么
    console.log('err' + error)
    return Promise.reject(error)
  }
)

export default request